
/*
* 内部类
* 1.将一个类定义到另一个类或者方法的内部
* */

/*
* 内部类
* 1.静态内部类
* 2.实例内部类
* 3.本地内部类
* 4.匿名内部类
* */
/*class OuterClass {

    public int date1 = 1;
    private int data2 = 2;
    private static int data3 = 3;
    *//*
    * 实例内部类
    * 怎么实例化?
    * 1.先实例化外部类 在通过外部内名.new一个内部类对象
    *   OuterClass outerClass = new OuterClass();
        OuterClass.InnerClass innerClass = outerClass.new InnerClass();
    *实例内部类的创建 要先有外部类的实例化对象
    * *//*
    class InnerClass {

        public int date4 = 4;
        private int data5 = 5;

        public void InnerClass() {
            System.out.println("实例内部类的构造方法!");
        }
        public void InnerFunc() {
            System.out.println("实例内部类的普通方法!");
        }

    }
}*/

class OuterClass {

    public int date1 = 1;
    private int data2 = 2;
    private static int data3 = 3;

    /*
    * 静态内部类
    * 1.拿到静态内部类的对象
    * OuterClass.InnerClass innerClass = new OuterClass.InnerClass();
    * 2.不能在静态内部类当中直接访问外部类非静态的数据成员
    *
    * */
    static class InnerClass {

        public int date4 = 4;
        private int data5 = 5;

        public void InnerClass() {
            System.out.println("实例内部类的构造方法!");
        }
        public void InnerFunc() {
            System.out.println("实例内部类的普通方法!");
        }

    }
}

/*
* 匿名内部类
* */
class Person {
    public String name;
    public int age;
    public void test() {
        System.out.println("123456");
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

public class Test4 {

    public static void main(String[] args) {
        new Person(){

            @Override
            public void test() {
                System.out.println("789654");
            }
        }.test();
    }








/*
* 局部内部类
* 不能被public static所修饰
*
* */
    public static void func() {
        class Test {
            public void fun() {
                System.out.println(10);
            }
        }
        Test test = new Test();
        test.fun();

    }




    public static void main2(String[] args) {




        /*OuterClass.InnerClass innerClass = new OuterClass.InnerClass();
        System.out.println(innerClass.date4);*/

       /* func();*/



    }


}
